{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "aquatic-special", "metadata": {}, "outputs": [], "source": [ "# In this Python notebook we attempt to evaluate numerical derivatives of a\n", "# list of data.\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 4, "id": "recorded-status", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2,\n", " 3, 4, 5, 6, 7, 8, 9, 10]),\n", " array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# First, we introduce the 'diff' function. diff(x) will take list x and\n", "# create a new list whose elements are equal to the difference between\n", "# adjacent elements in x. For example, let's make x a list from -10 to 10 in\n", "# steps of 1.\n", "xdata = np.arange(-10, 11, 1)\n", "dx = np.diff(xdata)\n", "xdata, dx" ] }, { "cell_type": "code", "execution_count": 5, "id": "honest-florist", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "length of x: 21\n", "length of dx: 20\n" ] } ], "source": [ "# In this case, dx is a list of ones. Note that, because it is determined\n", "# from a difference, the list dx is one element shorter than the list x.\n", "print('length of x:', len(xdata))\n", "print('length of dx:', len(dx))" ] }, { "cell_type": "code", "execution_count": 6, "id": "entertaining-curtis", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Now let's make y = x^2 and plot y vs x. The result is clearly a\n", "# quadratic.\n", "y = xdata**2\n", "plt.plot(xdata, y, 'go', fillstyle = 'none');" ] }, { "cell_type": "code", "execution_count": 7, "id": "immune-visit", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dy/dx: [-19. -17. -15. -13. -11. -9. -7. -5. -3. -1. 1. 3. 5. 7.\n", " 9. 11. 13. 15. 17. 19.]\n" ] } ], "source": [ "# To evaluate the derivative of y with respect to x, we need to determine\n", "# the change in y over the change in x.\n", "dydx = np.diff(y)/np.diff(xdata)\n", "print('dy/dx:', dydx)" ] }, { "cell_type": "code", "execution_count": 8, "id": "presidential-burst", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "length of x1: 20\n" ] } ], "source": [ "# We should expect dydx vs x to be a straigt line of slope 2. To generate\n", "# the plot, remember that we have to reduce the length of x by 1.\n", "x1 = xdata[1:len(xdata)]\n", "print('length of x1:', len(x1))" ] }, { "cell_type": "code", "execution_count": 9, "id": "assigned-woman", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The best-fit parameters are: (1) slope = 2.0 and (2) intercept -0.9999999999999997\n" ] } ], "source": [ "# We will fit the data to confirm the slope is about right.\n", "def linearFunc(x, slope, intercept):\n", " y = slope*x + intercept\n", " return y\n", "from scipy.optimize import curve_fit\n", "a_fit, cov = curve_fit(linearFunc, x1, dydx)\n", "print('The best-fit parameters are: (1) slope =', a_fit[0], 'and (2) intercept',\\\n", " a_fit[1])" ] }, { "cell_type": "code", "execution_count": 10, "id": "difficult-judges", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot the numerical derivative and our fit line.\n", "plt.plot(x1, dydx, 'o', fillstyle = 'none')\n", "fitFcn = np.poly1d(a_fit)\n", "plt.plot(x1, fitFcn(x1), 'k-');" ] }, { "cell_type": "code", "execution_count": 11, "id": "dominant-philip", "metadata": {}, "outputs": [], "source": [ "# Notice from the fit that the slope is indeed 2, but the y-intercept is 1\n", "# instead of the expected zero. This is an artifact of taking derivatives\n", "# of a discrete set of the data. We can improve our results if we reduced\n", "# the spacing between the x data." ] }, { "cell_type": "code", "execution_count": 12, "id": "happy-handling", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Just for fun, let's add some noise to our data. Let's suppose that the\n", "# uncertainty in x is 10% and that dy = 2*x*dx. 'np.random.uniform()' \n", "# generates a random number uniformly distributed between 0 and 1. \n", "# You can confirm for yourself that a + (b - a)*np.random.uniform() generates \n", "# a random number between a and b.\n", "xN = []\n", "yN = []\n", "for k in range(len(xdata)):\n", " xN = xN + [xdata[k] + 0.1*xdata[k]*(-1 + (1 - (-1))*np.random.uniform())]\n", " yN = yN + [xdata[k]**2 + 2*xdata[k]*0.1*xdata[k]*(-1 + (1 - (-1))*np.random.uniform())]\n", "plt.plot(xN, yN, 'go', fillstyle = 'none')\n", "dyNdx = np.diff(yN)/np.diff(xN)\n", "xN1 = xN[1:len(xN)]\n", "plt.figure()\n", "plt.plot(xN1, dyNdx, 'o', fillstyle = 'none');" ] }, { "cell_type": "code", "execution_count": null, "id": "linear-archives", "metadata": {}, "outputs": [], "source": [ "# As you might have anticipated, taking the ratio of the differences between a\n", "# pair of noisey datasets results in even more fluctuations. Obtaining\n", "# clean derivatives from discrete datasets requires precision measurements." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 5 }